package br.unisul.prolinear.model;

import java.io.Serializable;
import java.util.List;

import javax.persistence.Column;
import javax.persistence.DiscriminatorValue;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToMany;
import javax.persistence.OneToMany;



@Entity
@DiscriminatorValue(value="A")
public class Aluno extends Usuario implements Serializable {
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	@Column(name = "DS_CURSO")
	private String curso;
	@Column(name = "DS_INSTITUICAO") 
	private String instituicao;
	@Column(name = "DS_EMAIL_PROF")
	private String emailProfessor;

	public Aluno() {
		super();
		curso = "";
		instituicao = "";
		emailProfessor = "";
	}

	@OneToMany(fetch=FetchType.EAGER,targetEntity=Documento.class)
	@JoinColumn(name="IDUSER",referencedColumnName="IDUSER")
	private List<Documento> documentos;
	
	@ManyToMany(fetch=FetchType.EAGER,targetEntity=Documento.class)
	@JoinTable(name = "USUARIO_DOCUMENTO",
	joinColumns = {
			@JoinColumn(name="IDUSER")           
	},
	inverseJoinColumns = {
			@JoinColumn(name="IDDOCUMENTO")
	})			
	private List<Documento> documentosCompartilhados;
	
	@OneToMany(fetch=FetchType.EAGER,targetEntity=Compartilhamento.class)
	@JoinColumn(name="IDUSER",referencedColumnName="IDUSER")
	private List<Compartilhamento> compartilhamentos;
	
	public List<Documento> getDocumentosCompartilhados() {
		return documentosCompartilhados;
	}
	public void setDocumentosCompartilhados(List<Documento> documentosCompartilhados) {
		this.documentosCompartilhados = documentosCompartilhados;
	}
	public List<Documento> getDocumentos() {
		return documentos;
	}
	public void setDocumentos(List<Documento> documentos) {
		this.documentos = documentos;
	}
	public String getCurso() {
		return curso;
	}
	public void setCurso(String curso) {
		this.curso = curso;
	}
	public String getInstituicao() {
		return instituicao;
	}
	public void setInstituicao(String instituicao) {
		this.instituicao = instituicao;
	}
	public String getEmailProfessor() {
		return emailProfessor;
	}
	public void setEmailProfessor(String emailProfessor) {
		this.emailProfessor = emailProfessor;
	}
	public List<Compartilhamento> getCompartilhamentos() {
		return compartilhamentos;
	}
	public void setCompartilhamentos(List<Compartilhamento> compartilhamentos) {
		this.compartilhamentos = compartilhamentos;
	}
	
	@Override
	public boolean equals(Object obj) {
		Usuario a = (Usuario)obj;
		// TODO Auto-generated method stub
		return id.equals(a.getId());
	}

	@Override
	public Aluno clone(){
		Aluno a = new Aluno();
		a.setEmail(email);
		a.setEmailProfessor(emailProfessor);
		a.setId(new Long(id));
		return a;
	}

	public int getNumeroDocumentos(){
		return documentos.size();
	}
	
}
